Debian 12 – стабильный и надёжный серверный дистрибутив, но даже на нём время от времени требуется чистка и оптимизация для освобождения места на диске и поддержания производительности. В этой статье рассмотрим основные этапы и инструменты для оптимизации.
1. Проверка дискового пространства
Сначала увидим текущую загрузку диска:
df -h
Просмотр размера каталогов в корневом разделе:
du -h --max-depth=1 /
Это позволит определить «тяжёлые» папки.
2. Очистка кэша пакетного менеджера
APT сохраняет установочные пакеты в кэше, чтобы не загружать их повторно.
Очистить весь кэш:
apt clean
Удалить устаревшие пакеты из кэша:
apt autoclean
3. Удаление неиспользуемых и зависимых пакетов
Через время системный мусор накапливается в виде неиспользуемых библиотек:
apt autoremove
4. Очистка журналов системы
Логи могут занимать много места, особенно systemd-journal.
Просмотр размера логов:
du -sh /var/log/*
Очистка журналов systemd старше определённого размера, например сузить журнал до 500 МБ:
journalctl --vacuum-size=500M
Удаление всех журналов (будь осторожен, это стирает логи):
rm -rf /var/log/journal/*
systemctl restart systemd-journald
Полное удаление журналов может затруднить диагностику, если потребуется.
Также можно очистить старые файлы логов btmp и wtmp, которые отвечают за логи входов:
> /var/log/btmp
> /var/log/btmp.1
> /var/log/wtmp
5. Поиск и очистка больших файлов
Чтобы отыскать файлы, которые занимают много места (например больше 100 МБ):
find / -type f -size +100M -exec ls -lh {} \;
Просмотри эти файлы и удали или перемести ненужные.
6. Чистка домашнего кэша
Пользовательские кэши могут расти многократно.
Для root:
rm -rf /root/.cache/*
Для обычного пользователя:
rm -rf ~/.cache/*
7. Управление swap
Чтобы улучшить производительность, иногда полезно проверить swap.
Просмотр swap:
swapon --show
free -h
Отключение swap (временно):
swapoff -a
Важно: после отключения swap он останется выключенным, пока не включить его вручную или не перезагрузить сервер.
Чтобы очистить swap без перезагрузки, рекомендуем сделать отключение и повторное включение:
swapoff -a
swapon -a
Это освободит swap и вернёт его в работу без перезапуска системы.
8. Оптимизация и очистка системных служб
Смотреть и отключать неиспользуемые службы:
systemctl list-unit-files --state=enabled
systemctl disable имя_службы
9. Проверка и очистка временных файлов в /tmp
Перед тем как удалять файлы из /tmp, рекомендуется проверить, что там нет важных или используемых системой и процессами данных.
Проверка содержимого /tmp
Посмотреть список файлов и их даты создания:
ls -lht /tmp
Если выводимый список пустой (total 0), значит в /tmp сейчас нет файлов – удалить можно безопасно.
Проверка занятости /tmp процессами
Посмотреть, какие процессы используют файлы в /tmp:
lsof +D /tmp
Если команда не найдена, установи инструмент:
apt install lsof
Если вывод пуст – значит процессы не блокируют /tmp и файлы не используются.
Дополнительная проверка процессов с /tmp
Можно посмотреть процессы, работающие с временной папкой:
fuser -v /tmp
Если этот вывод пустой, то /tmp свободна для очистки.
Проверка устаревших файлов
Найти файлы в /tmp старше одного дня:
find /tmp -type f -mtime +1 -ls
Это поможет выявить старые временные файлы, которые можно удалить без риска.
Итоги
- Если папка /tmp пуста – удаление безопасно.
- Если процессы не используют файлы в /tmp – можно удалять спокойно.
- Старые файлы в /tmp обычно можно удалять для освобождения места и улучшения производительности.
- Перед очисткой рекомендуется внимательно проверить содержимое и занятость /tmp, чтобы не нарушить работу активных приложений.
И после проверки можно очистить временные файлы:
rm -rf /tmp/*
10. Обновление и оптимизация системы
Обновить пакеты до последних версий:
apt update && apt upgrade -y
Проверить целостность установленных пакетов и очистить неиспользуемые:
deborphan
11. Автоматизация очистки: настройка cron
Пример задания в cron для очистки кэша пакетов и старых логов еженедельно.
Файл /etc/cron.weekly/cleanup
Открываем:
nano /etc/cron.weekly/cleanup
Вставляем:
#!/bin/bash
# Скрипт для автоматической очистки кэша, неиспользуемых пакетов, системных журналов и временных файлов /tmp
# Выполнять только с правами root!
echo "cleanup запущен: $(date)" >> /var/log/cleanup.log
echo "Начинаем очистку системы..." >> /var/log/cleanup.log
# Полные пути к командам
APT_BIN="/usr/bin/apt"
JOURNALCTL_BIN="/usr/bin/journalctl"
LSOF_BIN="/usr/bin/lsof"
FIND_BIN="/usr/bin/find"
RM_BIN="/bin/rm"
# Очистка кэша APT
$APT_BIN clean
# Удаление неиспользуемых пакетов
$APT_BIN autoremove -y
# Важно: рекомендуется использовать команду 'journalctl --vacuum-size=500M' для безопасного ограничения размера системных журналов.
# Полное удаление папки /var/log/journal/ может привести к потере важных логов и усложнить диагностику системы.
# Ограничение размера системных журналов до 500 МБ
$JOURNALCTL_BIN --vacuum-size=500M
# Проверяем, используются ли файлы в /tmp процессами
if $LSOF_BIN +D /tmp >/dev/null 2>&1; then
echo "Предупреждение: В /tmp есть файлы, занятые процессами. Полная очистка отложена." >> /var/log/cleanup.log
echo "Удаляем только файлы в /tmp старше одного дня..." >> /var/log/cleanup.log
$FIND_BIN /tmp -mindepth 1 -mtime +1 -exec $RM_BIN -rf {} +
else
echo "Файлы в /tmp не заняты процессами. Выполняем полную очистку /tmp." >> /var/log/cleanup.log
# Удаляем все файлы в /tmp, включая скрытые (кроме . и ..)
$RM_BIN -rf /tmp/* /tmp/.[!.]*
fi
echo "Очистка завершена." >> /var/log/cleanup.log
Этот скрипт проверяет, заняты ли файлы в /tmp, и если да – безопасно удаляет только устаревшие (старше суток). Если /tmp свободна – удаляет всё полностью.
Дать права на выполнение:
chmod +x /etc/cron.weekly/cleanup
11.1 Ручная очистка Docker и системных журналов
Если в вашей системе ещё нет автоматизированных заданий для очистки Docker и логов, можно выполнять эти действия вручную.
Внимание:
Команда docker system prune -a --volumes -f удаляет все остановленные контейнеры, неиспользуемые образы, тома и сети. Это может привести к потере данных, если важные тома или контейнеры не используются в данный момент, но нужны вам позже. Перед выполнением убедитесь, что вы не потеряете нужную информацию.
Для очистки неиспользуемых данных Docker выполните команду:
docker system prune -a --volumes -f
Она удалит все остановленные контейнеры, неиспользуемые образы, тома и сети.
Если Docker не используется длительное время, можно временно остановить сервис и отключить его автозапуск:
sudo systemctl stop docker
sudo systemctl disable docker
Это освободит системные ресурсы и предотвратит автоматический запуск Docker при загрузке.
Для уменьшения размера системных журналов выполните:
journalctl --vacuum-size=500M
Эта команда оставит в журналах только 500 МБ самых свежих записей, удаляя старые.
Чтобы убедиться, что команды работают правильно при автоматическом запуске (например, в cron), рекомендуется использовать полные пути к ним.
Узнать полный путь легко:
which docker
which journalctl
Чаще всего это:
/usr/bin/docker
/usr/bin/journalctl
В следующих разделах рассмотрим, как настроить автоматическую очистку с учётом этого.
11.2 Настройка автоматической очистки через cron
Откройте редактор crontab от имени root:
sudo crontab -e
Добавьте строку для еженедельного выполнения очистки (например, каждый понедельник утром в 3 часа):
0 3 * * 1 /usr/bin/docker system prune -a --volumes -f && /usr/bin/journalctl --vacuum-size=500M >/dev/null 2>&1
Итоги
Регулярная очистка и мониторинг позволит поддерживать Debian 12 в оптимальном состоянии:
- Очистка кэша и неиспользуемых пакетов
- Контроль журналов и лимит их размера
- Поиск и удаление больших ненужных файлов
- Управление службами и swap
12. Команды для проверки работы скрипта и автозапуска через cron
Проверка прав и местоположения скрипта
ls -l /etc/cron.weekly/cleanup
Запуск скрипта вручную
sudo /etc/cron.weekly/cleanup
Просмотр лога работы скрипта
cat /var/log/cleanup.log
Проверка статуса службы cron
systemctl status cron
Проверка логов cron через системный журнал
grep CRON /var/log/syslog
Проверка логов cron через systemd journal
journalctl -u cron